package util;

import java.awt.Color;
import java.awt.event.FocusEvent;
import java.util.Vector;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Cleiton
 */
public class TabelaRoteadores {

    private DefaultTableModel defaultTableModel;
    private JTable table;
    DefaultTableCellRenderer letras = new DefaultTableCellRenderer() {

        public void setValue(Object value) {
            setBackground(new Color(238, 238, 238));
            setForeground(Color.BLACK);
            setHorizontalAlignment(JLabel.CENTER);

            //outras alterações entram aqui...
            super.setValue(value);
        }
    };

    public TabelaRoteadores(JTable table) {
        this.table = table;
        defaultTableModel = (DefaultTableModel) table.getModel();
        table.addFocusListener(
                new java.awt.event.FocusAdapter() {

                    public void focusGained(java.awt.event.FocusEvent evt) {
                        alterarFocu(evt);
                    }
                });
    }

    /**
     * Limpa uma determinada Tabela;
     */
    public void limparTabela() {
        // defaultTableModel.fireTableRowsDeleted(0, defaultTableModel.getRowCount());
        for (int i = defaultTableModel.getRowCount(); i > 0; i--) {
            defaultTableModel.removeRow(0);
        }
    }

    public void adicionarRoteador(String nome) {
        Vector vector = new Vector();
        vector.add(nome);
        defaultTableModel.addRow(vector);
        defaultTableModel.addColumn(nome);
         TableColumn tc = table.getColumn("Nome");
        tc.setCellRenderer(letras);
        }

    /**
     * Obtem a rede mapeada apartir da tabela de roteadores
     * @return a rede completamente mapeada
     */
    public String[][] getRede() {
        int linha = defaultTableModel.getRowCount();
        int coluna = defaultTableModel.getColumnCount();
        String[][] rede = new String[coluna][coluna];
        for (int i = 0; i < linha; i++) {
            rede[0][i + 1] = (String) defaultTableModel.getValueAt(i, 0);
        }
        for (int i = 0; i < linha; i++) {
            for (int j = 0; j < coluna; j++) {
                rede[i + 1][j] = (String) defaultTableModel.getValueAt(i, j);
            }
        }
        return rede;
    }

    /**
     * Faz uma matriz identidade
     * @param evt 
     */
    private void alterarFocu(FocusEvent evt) {
        int coluna = table.getSelectedColumn();
        int linha = table.getSelectedRow();
        if (coluna != -1 && coluna != 0 && linha != coluna - 1) {
            defaultTableModel.setValueAt(defaultTableModel.getValueAt(linha, coluna), coluna - 1, linha + 1);
        }
    }
}
